package br.com.fatecpg.minhasfinancas.sqlite;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.LinkedList;
import java.util.List;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import br.com.fatecpg.minhasfinancas.model.DespesaModel;
import br.com.fatecpg.minhasfinancas.model.ReceitaModel;

public class ReceitaSqlite extends SQLiteOpenHelper {

	public ReceitaSqlite(Context context) {
		super(context, DATABASE_NAME, null, DATABASE_VERSION);
	}

	private static final int DATABASE_VERSION = 4;
	private static final String DATABASE_NAME = "financas";

	@Override
	public void onCreate(SQLiteDatabase db) {
		String query = 
				 "CREATE TABLE tb_receita (" 
						+ "cd_receita INTEGER PRIMARY KEY NOT NULL,"
						+ "dt_receita DATE NOT NULL,"
						+ "vl_receita DECIMAL(8,2) NULL,"
						+ "nm_pagador_receita VARCHAR NULL,"
						+ "dc_receita VARCHAR NULL"
						+ ");";
		
		db.execSQL(query);
	}

	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		//db.execSQL("DROP TABLE IF EXISTS tb_receita");
		this.onCreate(db);
	}
	

	private static final String TABLE_RECEITA = "tb_receita";
	private static final String KEY_ID = "cd_receita";
	private static final String KEY_DATA = "dt_receita";
	private static final String KEY_VALOR= "vl_receita";
	private static final String KEY_PAGADOR = "nm_pagador_receita";
	private static final String KEY_DESCRICAO = "dc_receita";
	
	
	private static final String[] COLUMNS = { KEY_ID, KEY_DATA,
		KEY_VALOR, KEY_PAGADOR, KEY_DESCRICAO};
	

	public void insert(ReceitaModel model) {
			SQLiteDatabase db = this.getWritableDatabase();

		ContentValues values = new ContentValues();
		values.put(KEY_DATA, model.getData().toString());
	values.put(KEY_VALOR, model.getValor());
		values.put(KEY_PAGADOR, model.getPagador());
		values.put(KEY_DESCRICAO, model.getDescricao());
			
		db.insert(TABLE_RECEITA, null, values);
		db.close();
	}

	public ReceitaModel getReceita(int id) {

		SQLiteDatabase db = this.getReadableDatabase();

		Cursor cursor = db.query(TABLE_RECEITA, // a. table
				COLUMNS, " id = ?", new String[] { String.valueOf(id) }, null, // e.
																				// group
																				// by
				null, // f. having
				null, // g. order by
				null); // h. limit

		if (cursor != null)
			cursor.moveToFirst();

		SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
		Date dataSQL;
		try {
			dataSQL = dateFormat.parse(cursor.getString(1));
		} catch (Exception e) {
			dataSQL = new Date();
		}

		ReceitaModel model = new ReceitaModel();
		model.setId(Integer.parseInt(cursor.getString(0)));
		model.setData(dataSQL);	
		model.setValor(Double.parseDouble(cursor.getString(2)));
	model.setPagador(cursor.getString(3));
		model.setDescricao(cursor.getString(4));
	
		return model;
	}

	public List<ReceitaModel> getListaReceita() {
		List<ReceitaModel> receitas = new LinkedList<ReceitaModel>();

		String query = "SELECT  * FROM " + TABLE_RECEITA;

		SQLiteDatabase db = this.getWritableDatabase();
		Cursor cursor = db.rawQuery(query, null);

		ReceitaModel receita = null;
		if (cursor.moveToFirst()) {
			do {
				SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
				Date dataSQL;
				try {
					dataSQL = dateFormat.parse(cursor.getString(5));
				} catch (Exception e) {
					dataSQL = new Date();
				}
				
				receita = new ReceitaModel();
				receita.setId(Integer.parseInt(cursor.getString(0)));
				receita.setData(dataSQL);	
				receita.setValor(Double.parseDouble(cursor.getString(2)));
				receita.setPagador(cursor.getString(3));
				receita.setDescricao(cursor.getString(4));
				
				receitas.add(receita);
			} while (cursor.moveToNext());
		}
	
		return receitas;
	}

	public int update(ReceitaModel model) {

		SQLiteDatabase db = this.getWritableDatabase();

		ContentValues values = new ContentValues();
		values.put(KEY_DATA, model.getData().toString());
		values.put(KEY_VALOR, model.getValor());
		values.put(KEY_PAGADOR, model.getPagador());
		values.put(KEY_DESCRICAO, model.getDescricao());
		
		int i = db.update(TABLE_RECEITA, values, KEY_ID + " = ?", // selections
				new String[] { String.valueOf(model.getId()) });

		db.close();

		return i;

	}

	public void delete(DespesaModel model) {

		SQLiteDatabase db = this.getWritableDatabase();

		db.delete(TABLE_RECEITA, KEY_ID + " = ?",
				new String[] { String.valueOf(model.getId()) });

		db.close();
	}
}
